#include "EVariant.h"
#include <iostream>
#include <vector>
#include <string>
#include <DefineCommon.h>
#include <EItem.h>
#include <EItemVisitor.h>

int main_test_EItem(int argc, const char *argv[])//_test_EItem
{
    ELOG_INFO("ExeCommon test EItem");

    /**test EItem property releated*/
    ELOG_INFO("test EItem property--------");

    EItemPtr item1 = NewSmartPtr(EItem)();;
    item1->setName("Item1");
    // EVariant tempValue;
    // tempValue=10;
    // item1->addProperty("proInt", tempValue);
    // tempValue=123.4456;
    // item1->addProperty("proDouble", tempValue);
    // tempValue=true;
    // item1->addProperty("proBool", tempValue);
    // tempValue="Hello";
    // item1->addProperty("proStr", tempValue);
    // tempValue=EVec3(1,2,3);
    // item1->addProperty("proVec3", tempValue);

    ELOG_INFO("print Item1\n %s", item1->getPrintStr().data());

    /**test EItem tree adding*/
    ELOG_INFO("test EItem tree adding releated--------");
    EItemPtr item2 = NewSmartPtr(EItem)();
    EItemPtr item3 = NewSmartPtr(EItem)();
    EItemPtr item4 = NewSmartPtr(EItem)();
    item2->setName("Item2");
    item3->setName("Item3");
    item4->setName("Item4");

    item1->addChild(item2);
    item2->addChild(item3);
    item1->addChild(item4);

    ELOG_INFO("print Item1\n %s", item1->getPrintStr().data());
    ELOG_INFO("print Item2\n %s", item2->getPrintStr().data());
    ELOG_INFO("print Item3\n %s", item3->getPrintStr().data());

    /**test EItemVisitor*/
    ELOG_INFO("test EItemVisitor--------");
    EItemVisitorPtr visitor = NewSmartPtr(EItemVisitor)();
    visitor->travelEItem(item1);

    /**test EItem tree removing*/
    ELOG_INFO("test EItem tree removing releated----------------");
    item2->removeChild(item3.get());
    item1->removeChild(0);
  
    ELOG_INFO("Item1:\n %s", item1->getPrintStr().data());
    ELOG_INFO("Item2:\n %s", item2->getPrintStr().data());
    ELOG_INFO("Item3:\n %s", item3->getPrintStr().data());


    return 1;
}
